
package com.svh.Controlador;

import com.svh.Entidad.Empleado;
import com.svh.Entidad.Marca;
import com.svh.Paginator.MarcaPaginador;
import com.svh.Paginator.Paginador;
import com.svh.Servicios.MarcaServicio;
import com.svh.Utils.ExcelExporter;
import com.svh.Utils.Exporter;
import com.svh.Utils.Utilitario;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author Luis Alonso Ballena Garcia
 */
@ManagedBean(name = "marcaControlador")
@ViewScoped
public class MarcaControlador implements Serializable{
    Marca marca;
    LazyDataModel<Marca> marcas;
    MarcaServicio marcaServicio;
    @ManagedProperty("#{sesionControlador}")
    SesionControlador sesionControlador;
    
    public MarcaControlador() {
    
    }
    
    public void initLista(){
        if (!FacesContext.getCurrentInstance().isPostback()) {
            marcas = new Paginador<Marca>(new MarcaPaginador());
            sesionControlador.generarModulo(5);/** NUMERO MAGICO T_T **/
        }
    }
    
    public void initRegistrar()
    {
        if (!FacesContext.getCurrentInstance().isPostback()) {
            marca = new Marca();
        }
    }
    public void initActualizar(){
   if(!FacesContext.getCurrentInstance().isPostback()){
       Object parameter = Utilitario.getFlash("idMarca");
       if(parameter==null){
           Utilitario.redireccionarJSF(FacesContext.getCurrentInstance(),"/views/marca/list.xhtml" );
           return;
       }
       marcaServicio= new MarcaServicio();
       marca= marcaServicio.obtenerMarca((Integer)parameter);
   }
    
    }
    public void registrar(){
        if(!esVistaValida()){
            return;
        }
        marcaServicio = new MarcaServicio();
        marcaServicio.registrarMarca(marca);
        limpiar();
    }
    
    public void actualizar()
    {
        if(!esVistaValida()){
            return;
        }
       marcaServicio.actMarca(marca);
        
    }
    
    public String irActualizar(int id){
        Utilitario.putFlash("idMarca", id);
        return "update.xhtml?faces-redirect=true";
    }
    private boolean esVistaValida(){
        boolean resultado = true;
        if(!esNombreValido()){
            resultado = false;
        }else if(!esDescripcionValida()){
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres para la Descripción es 200");
            resultado = false;
        }
        return resultado;
    }
    
    private boolean esNombreValido()
    {
        boolean resultado = true;
        if(Utilitario.esNulo(marca.getNombre()))
        {
            Utilitario.enviarMensajeGlobalError("Debe ingresar el Nombre");
            resultado = false;
        }else if(!Utilitario.esRangoValido(marca.getNombre(),45))
        {
            Utilitario.enviarMensajeGlobalError("El máximo de caracteres para el Nombre es 45");
            resultado = false;
        }
        return resultado;
    }
    
    private boolean esDescripcionValida()
    {
        return Utilitario.esRangoValido(marca.getDescripcion(),200);
    }
    
    private void limpiar()
    {
        marca = new Marca();
    }
    
    public void exportar(){
        List<Exporter> datos = ((Paginador)marcas).getAllList();
        ExcelExporter da = new ExcelExporter(Marca.class);
        da.agregarHeader("Marcas");
        da.crearDocumento(datos);
        FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        externalContext = ExcelExporter.getResponseContent(externalContext,"Lista_marcas");
        try {
            OutputStream outputStream = externalContext.getResponseOutputStream();
            da.exportarDocumento(outputStream);
            externalContext.setResponseStatus(200);
            externalContext.responseFlushBuffer();
            facesContext.responseComplete();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /** GETTERS AND SETTERS **/
    
    public Marca getMarca() {
        return marca;
    }

    public void setMarca(Marca marca) {
        this.marca = marca;
    }

    public LazyDataModel<Marca> getMarcas() {
        return marcas;
    }

    public void setMarcas(LazyDataModel<Marca> marcas) {
        this.marcas = marcas;
    }

    public void setSesionControlador(SesionControlador sesionControlador) {
        this.sesionControlador = sesionControlador;
    }

    
    
    
}
